const path = require('path')
const swaggerUi = require('swagger-ui-express')
const fs = require('fs')
const swaggerJsdoc = require('swagger-jsdoc')

const options = {
  swaggerDefinition: {
    openapi: '3.0.0',
    info: {
      title: '书签管理器接口文档',
      version: '1.0.0'
    },
    servers: [
      {
        url: 'http://localhost:3000/api',
        description: '接口基础地址'
      }
    ]
  },
  apis: [path.resolve(__dirname, './router/module/*js')] // 指定包含 API 文档注释的文件路径
}

const swaggerJson = (req, res) => {
  res.setHeader('Content-Type', 'application/json')
  res.send(swaggerSpec)
}

const specs = swaggerJsdoc(options)

/**
 * 生成 swagger 文档
 * @param {*} app  express 实例
 */
const swaggerInstall = (app) => {
  // 开放相关接口
  app.get('/swagger.json', swaggerJson)

  // 生成 swagger.json 文件
  // const swaggerJsonPath = path.join(__dirname, '/swagger.json')
  // fs.writeFileSync(swaggerJsonPath, JSON.stringify(specs, null, 2))

  // 使用 swaggerSpec 生成 swagger 文档页面，并开放在指定路由
  app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(specs))
}

module.exports = swaggerInstall
